#include "MTF.cpp"
#include "includes.h"
#include <assert.h>

void test_1_printVector() {
	
	cout << "Inicio test printVector" << endl;
	vector<uChar>* v;
	v = new vector<uChar>;
	
	unsigned int i;
	for (i=1; i < 6; i++) {
		v->push_back(i);
	
	}
	
	imprimirVector(v);
	delete(v);
	
	cout << "Fin test printVector." << endl;
}

void test_2_compresorSinArchivo() {
	
	MTFCompress compresor;
	
	const char* texto = "honda";
	vector<uChar>* v = new vector<uChar>;
	v -> push_back(7);
	v -> push_back(5);
	v -> push_back(6);
	v -> push_back(10);
	v -> push_back(7);
	
	vector<uChar>* w = new vector<uChar>;
	
	compresor.runBlock(texto, w);
	
	unsigned int i;
	for (i=0; i<5; i++) {
		assert( v->at(i) == w->at(i) );
	}
	delete(v);
	delete(w);
	
	printf("[test_2_compresorSinArchivo]: TEST COMPRESION MTF OK! \n\n");
	
}

void test_3_compresorConArchivo() {
	
	//Prueba con tamanio de bloque > a tamanio de archivo
	
	uInt blockSize = 1024 * 900;
	MTFCompress compresor( "testmtf.txt" , blockSize);
	
	compresor.setOutputFilename( "MTFcompresorOutput.dat" );
	
	compresor.run();
		
	printf("[test_3_compresorConArchivo]: TEST COMPRESION MTF OK(?) \n\n");
	
}

void test_4_compresorConArchivo() {
	
	//Prueba con tamanio de bloque < a tamanio de archivo
	
	uInt blockSize = 3;
	MTFCompress compresor( "testmtf.txt" , blockSize);
	
	compresor.setOutputFilename( "MTFcompresorOutput.dat" );
	
	compresor.run();
		
	printf("[test_4_compresorConArchivo]: TEST COMPRESION MTF OK! \n\n");

}

void test_5_descompresorSinArchivo() {

	MTFDecompress descompresor;
	
	char compressed[] = "\x07\xc3\xb4\x08\x0c\x08\x10";
	
	string descomprimido;
	
	descompresor.runBlock(compressed,&descomprimido);
	
	assert( descomprimido == "hónda" );
	
	printf("[test_5_descompresorSinArchivo]: TEST DESCOMPRESION MTF OK\n\n");
}

void test_6_descompresorConArchivo() {
       
        MTFDecompress descompresor("MTFcompresorOutput.dat");
        descompresor.setOutputFilename( "MTFdescompresorOutput.dat" );
       
        string textoDescomprimido;
        //string textoOriginal = "hónda";
       
        //descompresor.runNextBlock( &textoDescomprimido );
        descompresor.run();
       
        //cout << "textoDescomprimido: '" << textoDescomprimido << "'" << endl;
       
        // Comparo los primeros 5 caracteres (porque el 6to es el EOF y
        // no lo puedo representar aca)
       // assert( textoDescomprimido.compare( 0,6, textoOriginal) == 0 );

               
        printf("[test_6_descompresorSinArchivo]: TEST DESCOMPRESION MTF OK(?) \n");
       
}

void test_7_descompresorConArchivo() {
	
}

int main (void) {
	
	//test_1_printVector();
	
	//test_2_compresorSinArchivo();
	test_3_compresorConArchivo();
	//test_4_compresorConArchivo();
	
	//test_5_descompresorSinArchivo();
	test_6_descompresorConArchivo();
	//test_7_descompresorConArchivo();
	
	return 0;
	
}
